/**
 * 
 */
package cn.nawang.ebeim.api.service;

import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSONObject;

import cn.nawang.ebeim.api.bean.DatasourceBean;
import cn.nawang.ebeim.api.bean.DatasourceMenuBean;
import cn.nawang.ebeim.api.comm.PageList;
import cn.nawang.ebeim.api.comm.Pages;
import cn.nawang.ebeim.api.domain.BackStrategy;
import cn.nawang.ebeim.api.domain.Datasource;
import cn.nawang.ebeim.api.domain.DatasourceConfig;
import cn.nawang.ebeim.api.domain.User;
import cn.nawang.ebeim.api.vo.DatasourceView;

/**
 * @ClassName: DatasourceService
 * @Description: 数据源业务逻辑层
 * @author 张建峰
 * @date 2015年8月6日 上午10:10:35
 * @version v1.0
 */
public interface DatasourceService {

  // /**
  // * @author 张建峰
  // * @Description: 根据客户id和终端id分页查询
  // * @param @param customerId
  // * @param @param terminalId
  // * @param @param page
  // * @param @return
  // * @return PageList
  // * @date 2015年8月10日上午10:01:06
  // *
  // * @修改人 张建峰
  // * @修改日期
  // */
  // public PageList findByCstIdAndTerId(String customerId,String terminalId,Pages page);


  public PageList findByDatasource(Datasource obj, Pages page);

  /**
   * 
   * @author fanyb
   * @Description: 分页查询
   * @param page
   * @return PageList
   * @date Oct 20, 201510:42:10 AM
   *
   * @修改人
   * @修改日期
   */
  public PageList findAllByPaging(Pages page);

  /**
   * @author 张建峰
   * @Description: 保存
   * @param @param datasource
   * @return void
   * @date 2015年8月6日上午10:50:25
   *
   * @修改人 张建峰
   * @修改日期
   */
  public void save(Datasource datasource);

  /**
   * @author 张建峰
   * @Description: 根据id查询对象
   * @param @param id
   * @param @return
   * @return Datasource
   * @date 2015年8月6日上午10:50:39
   *
   * @修改人 张建峰
   * @修改日期
   */
  public DatasourceBean findOne(String id);

  /**
   * @author 张建峰
   * @Description: 根据id查询DatasourceBean对象
   * @param @param id
   * @param @return
   * @return DatasourceView
   * @date 2015年9月9日下午5:35:31
   *
   * @修改人 张建峰
   * @修改日期
   */
  public DatasourceBean findDatasourceBean(String id);

  /**
   * 
   * @author fanyb
   * @Description: 根据id查询对象
   * @param id 数据源编号
   * @return Datasource 数据源
   * @date Aug 18, 20153:47:23 PM
   *
   * @修改人
   * @修改日期
   */
  public Datasource findDatasource(String id);

  /**
   * 
   * @author fanyb
   * @Description: 根据id查询DatasourceView对象
   * @param id 数据源编号
   * @return Datasource 数据源
   * @date Aug 18, 20153:47:23 PM
   *
   * @修改人
   * @修改日期
   */
  public DatasourceView findDatasourceView(String id);

  /**
   * 
   * @author fanyb
   * @Description: 更新数据源对象
   * @param datasource 数据源对象
   * @param datasource 数据源配置
   * @param bs 备份策略
   * @return boolean 更新结果
   * @date Aug 19, 20152:36:33 PM
   *
   * @修改人
   * @修改日期
   */
  public boolean updateDatasource(Datasource datasource, DatasourceConfig datasourceConfig,
      BackStrategy bs, User user);

  /**
   * 
   * @author fanyb
   * @Description: 新增数据源
   * @param datasource 数据源对象
   * @param datasouceConfig 数据源配置
   * @param bs 备份策略
   * @return boolean
   * @date Sep 23, 20159:11:24 AM
   *
   * @修改人
   * @修改日期
   */

  public JSONObject addDatasource(Datasource datasource,DatasourceConfig datasourceConfig,BackStrategy bs,User user);
  

  /**
   * 
   * @author fanyb
   * @Description: 根据某个属性查找DatasourceView
   * @param property 属性名
   * @param value 属性值
   * @return List<DatasourceView>
   * @date Sep 9, 20153:13:08 PM
   *
   * @修改人
   * @修改日期
   */
  public List<DatasourceView> findDatasourceViewByParam(String property, Object value);

  public JSONObject findDatasourceViewByPage(String property, Object value, Integer currPage,
      Integer pageSize);

  public boolean add(Datasource datasource);

  public boolean delete(Datasource datasource);

  /**
   * 
   * @author fanyb
   * @Description: 查找同一个设备下的root是否已存在
   * @param terminalId
   * @param root
   * @param createUserId
   * @return Datasource
   * @date Oct 30, 20154:30:08 PM
   *
   * @修改人
   * @修改日期
   */
  public Datasource findByDeviceAndRoot(String terminalId, String root, String createUserId);

  public List findListByUserId(String mac, String UserId);

  public List findPlanListByUserId(String mac, String userId, String useSel);

  /**
   * 
   * @author: huanghj
   * @Description: 计算数据源数目
   * @param @param userId
   * @param @param terminalId
   * @param @param status
   * @param @param dsType
   * @param @return
   * @return int
   * @date 2015年11月23日下午4:41:20
   *
   * @修改人
   * @修改日期
   */
  public int countByUserId(String userId, String terminalId, String dsStatus, String dsType);

  public Map findSafeBoxByUserId(String mac, String UserId);

  /**
   * 
   * @author fanyb
   * @Description: 查找当前用户的设备名称
   * @param createUserId
   * @return List<Datasource>
   * @date Nov 11, 20152:08:52 PM
   *
   * @修改人
   * @修改日期
   */
  public List<DatasourceMenuBean> findBindDeviceNameByTerminalId(String createUserId);

  /**
   * 
   * @author fanyb
   * @Description: 批量更新数据源状态
   * @param ids
   * @return boolean
   * @date Nov 12, 20153:55:08 PM
   *
   * @修改人
   * @修改日期
   */
  public boolean updateDatasourcesStatus(String[] ids,int dsStatus);
  
  /**
   * 
   * @author fanyb
   * @Description:根据ids查找运行状态列表
   * @param ids
   * @param status
   * @return List<Datasource> 
   * @date Nov 26, 20152:09:49 PM
   *
   * @修改人 
   * @修改日期
   */
  public List<Datasource> findDatasources(String[] ids,int status);
  
  /**
   * 
   * @author fanyb
   * @Description: 根据创建人id和状态查找数据源列表
   * @param createUserId
   * @param dsType
   * @return List<Datasource> 
   * @date Nov 27, 20152:24:40 PM
   *
   * @修改人 
   * @修改日期
   */
  public List<Datasource> findByCreateUserIdAndDsType(String createUserId,String dsType);
  
}
